from app import create_app, db
from app.models import User, Role, Permission, Thesis
import os

def init_db():
    app = create_app()
    
    # 确保数据库文件所在的目录存在
    db_path = os.path.dirname(app.config['SQLALCHEMY_DATABASE_URI'].replace('sqlite:///', ''))
    if not os.path.exists(db_path):
        os.makedirs(db_path)
    
    with app.app_context():
        # 删除所有现有表
        db.drop_all()
        
        # 创建所有表
        db.create_all()
        
        # 创建角色
        admin_role = Role(name='admin', description='管理员', 
                         permissions=Permission.ADMIN)
        mod_role = Role(name='moderator', description='版主', 
                       permissions=Permission.MODERATE | Permission.COMMENT | 
                       Permission.POST | Permission.VIEW)
        user_role = Role(name='user', description='普通用户',
                        permissions=Permission.VIEW | Permission.COMMENT | 
                        Permission.POST)
        
        db.session.add_all([admin_role, mod_role, user_role])
        
        # 创建管理员账户
        admin = User(username='admin', email='admin@example.com')
        admin.set_password('admin123')
        admin.roles.append(admin_role)
        db.session.add(admin)
        
        # 创建一些测试数据
        test_user = User(username='test', email='test@example.com')
        test_user.set_password('test123')
        test_user.roles.append(user_role)
        db.session.add(test_user)
        
        # 添加一些测试论文
        thesis1 = Thesis(
            title='学生成绩管理系统',
            description='使用Python和Flask开发的学生成绩管理系统，包含用户管理、成绩录入、统计分析等功能。',
            programming_language='Python',
            price=2000.00,
            user=test_user
        )
        
        thesis2 = Thesis(
            title='在线商城系统',
            description='基于Java Spring Boot的电商平台，实现商品管理、购物车、订单处理等功能。',
            programming_language='Java',
            price=3000.00,
            user=test_user,
            status='accepted'
        )
        
        db.session.add_all([thesis1, thesis2])
        
        try:
            db.session.commit()
            print("数据库初始化成功！")
            print("\n管理员账户：")
            print("用户名: admin")
            print("密码: admin123")
            print("\n测试账户：")
            print("用户名: test")
            print("密码: test123")
        except Exception as e:
            print(f"初始化数据库时出错: {e}")
            db.session.rollback()

if __name__ == '__main__':
    init_db() 